const formRules = require("../util/formRules.js");
module.exports = {
	/**
	 * 新增，同步加到菜单表
	 * @url admin/nav/sys/add 前端调用的url参数地址
	 * data 请求参数 说明
	 * @param {String} menu_id 			栏目标识
	 * @param {String} name 			栏目名称
	 * @param {String} icon 			图标
	 * @param {String} has_children		是否有子栏目。有子栏目时，不显示type/mode/url
	 * @param {String} type 			栏目类型 news-文章，activity-活动，person-人员，company-企业，custom-定制
	 * @param {String} mode 			展示形式 single-单页，list-列表，imglist-图文列表，grid-宫格，custom-定制
	 * @param {String} url 				页面路径 定制时填写
	 * @param {String} comment 			备注
	 * @param {Number} sort 			排序(越小越在前面)
	 * @param {String} parent_id 		父级id
	 * @param {Boolean} enable 			是否启用
	 * res 返回参数说明
	 * @param {Number} code 错误码，0表示成功
	 * @param {String} msg 详细信息
	 */
	main: async (event) => {
		let { data = {}, userInfo, util, filterResponse, originalParam } = event;
		let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
		let { uid } = data;
		let res = { code: 0, msg: "" };
		// 业务逻辑开始-----------------------------------------------------------
		let {
			menu_id,
			name,
			icon,
			has_children,
			type,
			mode,
			url,
			comment,
			sort = 0,
			parent_id,
			enable = true,
		} = data;

		// 参数合法校验开始-----------------------------------------------------------
		let formRulesRes = await formRules.add(event);
		if (formRulesRes.code !== 0) {
			return formRulesRes;
		}
		// 参数合法校验结束-----------------------------------------------------------
		
		// 检测menu_id是否存在
		let num = await vk.baseDao.count({
			dbName: "opendb-admin-menus",
			whereJson: {
				menu_id
			}
		});
		if (num > 0) {
			return { code: -1, msg: `标识【${menu_id}】不能重复!` };
		}

		let dbName = "lzy-nav";
		let dataJson = {
			_id: menu_id,
			menu_id,
			name,
			icon,
			has_children,
			type,
			mode,
			url,
			comment,
			sort,
			parent_id,
			enable,
		};
		
		// 有子栏目，无type/mode/url
		if(has_children){
			delete dataJson["type"];
			delete dataJson["mode"];
			delete dataJson["url"];
		}else{
			// 定制类型，无mode
			if (type == 'custom') {
				if(!url) return { code: -1, msg: `定制类型必须填写url!` };
				delete dataJson["mode"];
			}
			else{
				// 定制形式，手填url
				if(mode == 'custom' && !url) return { code: -1, msg: `定制形式必须填写url!` };
				// 已开发的模板，路径规则为 type目录下的mode.vue
				if (mode == 'single' || mode == 'list' || mode == 'imglist' || mode == 'grid') {
					dataJson["url"] = `/pages/${type}/${mode}`;
				}
			}
		}

		// 检测parent_id是否存在
		if (vk.pubfn.isNotNull(parent_id)) {
			let num = await vk.baseDao.count({
				dbName,
				whereJson: {
					_id: parent_id
				}
			});
			if (num <= 0) {
				return { code: -1, msg: `上级栏目【${parent_id}】不存在!` };
			}
		} else {
			delete dataJson["parent_id"];
		}
		// 执行数据库API请求
		res.id = await vk.baseDao.add({
			dbName,
			dataJson
		});
		// 同步加到菜单表
		// url后面追加navid
		if (dataJson["url"]) {
			let joinstr = dataJson["url"].indexOf('?') > 0 ? '&' : '?';
			dataJson["url"] += `${joinstr}nav_id=${res.id}`;
		}
		await vk.baseDao.add({
			dbName: "opendb-admin-menus",
			dataJson: {
				_id: res.id,
				...dataJson,
				hidden_menu: false,
				is_nav: true,
			}
		});
		return res;
	}
}